/*
 * Conexion.java
 *
 * Created on 26 de abril de 2007, 21:32
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
mat
 */
package Control;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Date;
import java.sql.Time;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import Compras.Mantenimiento_productos;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.*;
import Control.MiModelo;
import Control.MiModeloVentaBoleta;
import Mantenimiento.Mantenimiento_proveedores;
import Compras.Mantenimiento_categorias;
import Compras.Mantenimiento_servicios;
import java.util.StringTokenizer;

/**
 *
 * 
 */
public class Conexion {

    Connection mibase;
    Statement operacion, operacion2;
    ResultSet respuesta, respuesta1;
    PreparedStatement comando, comando2, comando3;
    Mantenimiento_productos frmMantenimientoProductos;
    Mantenimiento_proveedores frmMantenimientoProveedores;
    Mantenimiento_categorias frmMantenimientoCategorias;
    Mantenimiento_servicios frmMantenimientoServicios;
    Tiempo time = new Tiempo();
    String[] fecha_sistema;
    String hora_sistema;

    /** Creates a new instance of Conexion */
    public Conexion() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Driver mySQL instalado");
            mibase = DriverManager.getConnection("jdbc:mysql://localhost:3306/atsiscoin",
                    "root", "root");
            System.out.println("Base de datos conectada");
        } catch (Exception ex) {//para hacerlo general
            ex.printStackTrace();
        }
    }

    public void reporte_auditoria_x_fecha(String fecha) {
        try {
//Ruta de Archivo Jasper

            String fileName = "src\\Reportes\\reporte_auditoria_por_fecha.jasper";

//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");
            parameters.put("fecha", fecha);
            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);
            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Reporte de auditoría por fecha");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public void reporte_auditoria_x_usuario(String usuario) {
        try {
//Ruta de Archivo Jasper

            String fileName = "src\\Reportes\\reporte_auditoria_por_usuario.jasper";

//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");
            parameters.put("usuario", usuario);
            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);
            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Reporte de auditoría por usuario");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public void reporte_gastos_x_proveedor(String fecha_inicio, String fecha_fin, String proveedor) {
        try {
//Ruta de Archivo Jasper
            Float total_acumulado;
            String fileName = "src\\Reportes\\Reporte_gastos_proveedor.jasper";
            total_acumulado = cargar_total_gastos(fecha_inicio, fecha_fin, proveedor);
//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");
            parameters.put("fecha_inicio", fecha_inicio);
            parameters.put("fecha_fin", fecha_fin);
            parameters.put("total", "" + total_acumulado);
            parameters.put("nproveedor", proveedor);
            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);
            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Reporte de Gastos por Proveedor");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public Float cargar_total_gastos(String fecha_inicio, String fecha_fin, String nproveedor) {
        Float datos1 = Float.parseFloat("0");

        String sentencia = "SELECT (SELECT SUM(dcompra2.cantidad*dcompra2.precio_costo*1.19) FROM comprobante_compra AS ccompra2, detalle_compra AS dcompra2 WHERE ccompra2.codigo=ccompra.codigo AND ccompra2.codigo=dcompra2.codigo_comprobante GROUP BY ccompra2.codigo) AS valor "
                + "FROM comprobante_compra AS ccompra, proveedor AS prov " + "WHERE ccompra.fecha>='" + fecha_inicio + "' AND ccompra.fecha<='" + fecha_fin + "' AND prov.nombre_corporativo='" + nproveedor + "' AND prov.codigo=ccompra.codigo_proveedor";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);

            while (respuesta.next()) {
                datos1 = Float.parseFloat(respuesta.getString(1)) + datos1;
                System.out.println("total::: " + datos1);
            }
            datos1 = Float.parseFloat("" + redondear(datos1, 2));

            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;
    }

    public void cargar_productos_x_proveedor(String proveedor) {
        try {
//Ruta de Archivo Jasper

            String fileName = "src\\Reportes\\reporte_productos_segun_proveedor.jasper";
//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");
            parameters.put("nproveedor", proveedor);

            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);
            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Lista de Productos según proveedor");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public void boleta_venta(String codigo_boleta) {
        try {
//Ruta de Archivo Jasper
            String fileName = "src\\Reportes\\boleta_venta.jasper";
//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("codigo_boleta", codigo_boleta);


            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);

            //  JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters);

            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Boleta de Venta");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public void factura_venta(String codigo_factura) {
        try {
//Ruta de Archivo Jasper
            String fileName = "src\\Reportes\\factura_venta.jasper";
//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("codigo_factura", codigo_factura);


            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);

            //  JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters);

            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Factura de Venta");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public void informe_stock_productos() {
        try {
//Ruta de Archivo Jasper
            String fileName = "src\\Reportes\\informe_stock.jasper";
//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");


            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);

            //  JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters);

            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Informe de Stock de Productos");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public void reporte_ventas_productos(String fecha_inicio, String fecha_fin) {
        try {
//Ruta de Archivo Jasper
            Float[] valores;
            String fileName = "src\\Reportes\\reporte_venta_productos.jasper";
            valores = this.cargar_igv_total_venta(fecha_inicio, fecha_fin);
//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");
            parameters.put("fecha_inicio", fecha_inicio);
            parameters.put("fecha_fin", fecha_fin);
            parameters.put("total_igv", "" + valores[0]);
            parameters.put("total", "" + valores[1]);
            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);
            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Reporte de ventas de productos");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    /***********MI PROCEDIMIENTO************/
    public void reporte_compra_venta_productos(String fecha_inicio, String fecha_fin) {
        try {
//Ruta de Archivo Jasper
            Float total_ventas, total_compras;
            String fileName = "src\\Reportes\\reporte_compra_venta.jasper";
            total_ventas = retornar_suma_de_totales_venta(fecha_inicio, fecha_fin);
            total_compras = retornar_suma_de_totales_compra(fecha_inicio, fecha_fin);
            //Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");
            parameters.put("fecha_ini", fecha_inicio);
            parameters.put("fecha_fin", fecha_fin);

            parameters.put("total_compras", "" + total_compras);
            parameters.put("total_ventas", "" + total_ventas);
            parameters.put("total_utilidad", "" + (total_ventas - total_compras));

            parameters.put("subreport1", "src\\Reportes\\reporte_compra_venta_sub_compras.jasper");
            parameters.put("subreport2", "src\\Reportes\\reporte_compra_venta_sub_ventas.jasper");


            JasperPrint jasperPrint2 = JasperFillManager.fillReport(fileName, parameters, mibase);

            JasperViewer jviewer = new JasperViewer(jasperPrint2, false);

            jviewer.setTitle("Reporte de compras y ventas de productos");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public void reporte_compras_productos(String fecha_inicio, String fecha_fin) {
        try {

//Ruta de Archivo Jasper
            String fileName = "src\\Reportes\\reporte_compra_productos.jasper";
            Float[] valores;
            valores = this.cargar_igv_total_compras(fecha_inicio, fecha_fin);
//Pasamos parametros al reporte Jasper.
            Map parameters = new HashMap();
            parameters.put("FIGURITA", "src\\imagenes\\logotipo_ATSisCoIn.gif");
            parameters.put("fecha_inicio", fecha_inicio);
            parameters.put("fecha_fin", fecha_fin);
            parameters.put("total_igv", "" + valores[0]);
            parameters.put("total", "" + valores[1]);

            JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, mibase);
            JasperViewer jviewer = new JasperViewer(jasperPrint, false);

            jviewer.setTitle("Reporte de compras de productos");
            jviewer.show();

        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        } finally {
            //conection.cerrar();
            System.out.println("Terminó");
        }
    }

    public MiModeloUsuarios cargar_usuarios() {

        MiModeloUsuarios model = new MiModeloUsuarios();
        model.addColumn("Codigo");
        model.addColumn("Nombres y Apellidos");
        model.addColumn("Tipo Usuario");
        model.addColumn("Usuario");
        model.addColumn("Contraseña");

        String sentencia = "select usu.codigo, CONCAT(usu.nombres,' ', usu.apellido_paterno,' ',apellido_materno), tip.descripcion, usu.username, usu.clave from usuario as usu, tipo_usuario as tip where usu.codigo_tipo_usuario=tip.codigo "
                + "order by usu.codigo asc";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 1; i < 6; i++) {
                    fil.add(respuesta.getString(i));
                }
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;

    }

    public Float retornar_suma_de_totales_compra(String fecha_inicio, String fecha_fin) {
        Float total_compra = Float.parseFloat("0");

        String sentencia = "SELECT sum(monto_total) FROM comprobante_compra where fecha>='" + fecha_inicio + "' and fecha<='" + fecha_fin + "'";

        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            if (respuesta.next()) {
                total_compra = respuesta.getFloat(1);

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return total_compra;
    }

    public Float retornar_suma_de_totales_venta(String fecha_inicio, String fecha_fin) {
        Float total_venta = Float.parseFloat("0");

        String sentencia = "SELECT sum(monto_total) FROM comprobante_venta where fecha>='" + fecha_inicio + "' and fecha<='" + fecha_fin + "'";

        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            if (respuesta.next()) {
                total_venta = respuesta.getFloat(1);

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return total_venta;
    }

    public Vector retornar_codigos_comprobante_compra() {
        Vector<String> codigos_compra = new Vector();

        String sentencia = "select codigo from comprobante_compra";

        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                codigos_compra.addElement(respuesta.getString(1));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return codigos_compra;
    }

    public MiModeloProductos cargar_productos() {

        MiModeloProductos model = new MiModeloProductos();
        model.addColumn("Codigo");
        model.addColumn("Descripción");
        model.addColumn("Categoría");
        model.addColumn("Stock");
        model.addColumn("Precio venta");

        String sentencia = " select prod.codigo,  prod.descripcion, cate.descripcion, prod.stock, prod.precio_venta from producto as prod, categoria as cate where prod.codigo_categoria = cate.codigo order by prod.codigo asc";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 1; i < 6; i++) {
                    fil.add(respuesta.getString(i));
                }
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;

    }

    public MiModeloCategorias cargar_categorias() {

        MiModeloCategorias model = new MiModeloCategorias();
        model.addColumn("Codigo");
        model.addColumn("Descripción");

        String sentencia = " select cate.codigo,  cate.descripcion from categoria as cate order by cate.codigo asc";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 1; i < 3; i++) {
                    fil.add(respuesta.getString(i));
                }
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;

    }

    public MiModeloTipoServicios cargar_servicios() {

        MiModeloTipoServicios model = new MiModeloTipoServicios();
        model.addColumn("Codigo");
        model.addColumn("Descripción");

        String sentencia = " select servi.idtiposervicio,  servi.descripcion from tipo_servicio as servi where servi.idtiposervicio!=0 order by servi.idtiposervicio asc";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 1; i < 3; i++) {
                    fil.add(respuesta.getString(i));
                }
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;

    }

    public MiModeloComprobantesCompra cargar_comprobantes_compra() {
        MiModeloComprobantesCompra model = new MiModeloComprobantesCompra();
        model.addColumn("Codigo");
        model.addColumn("Fecha");
        model.addColumn("Proveedor");
        model.addColumn("Monto_IGV");
        model.addColumn("Monto_Total");
        String sentencia = "SELECT comp.codigo, comp.fecha, prov.nombre_corporativo, comp.monto_IGV, comp.monto_total  FROM comprobante_compra AS comp, proveedor prov WHERE comp.codigo_proveedor =prov.codigo ORDER BY comp.fecha asc";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 1; i < 6; i++) {
                    fil.add(respuesta.getString(i));
                }
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;
    }

    public DefaultTableModel cargar_comprobantes_venta() {
        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Codigo");
        model.addColumn("Fecha");
        model.addColumn("Comprobante");
        model.addColumn("Cliente");
        model.addColumn("Monto IGV");
        model.addColumn("Monto Total");
        String sentencia = "SELECT comp.codigo, comp.fecha, comp.tipo_comprobante, comp.cliente, comp.monto_IGV, comp.monto_total  FROM comprobante_venta AS comp order by comp.codigo asc ";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 1; i < 7; i++) {
                    fil.add(respuesta.getString(i));
                }
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;
    }

    public void modificar_comprobante_venta_productos(String condicion_pago, Integer codigo_usuario_auditoria, int codigo, String vfecha, float igv, float total, String tipo_comprobante, String cliente, String RUC, String direccion, String orden_servicio, String orden_compra, String dni, DefaultTableModel model, DefaultTableModel model_preliminar) {
        boolean correcto = false;
        String sentencia = "UPDATE comprobante_venta SET condicion_pago='" + condicion_pago + "', tipo_comprobante ='" + tipo_comprobante + "', cliente ='" + cliente + "', RUC='" + RUC + "', monto_igv='" + igv + "', monto_total='" + total + "', direccion='" + direccion + "', orden_servicio='" + orden_servicio + "' ,orden_compra='" + orden_compra + "', dni='" + dni + "' where codigo ='" + codigo + "'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
                modificar_detalle_comprobante_venta_productos(codigo, model, model_preliminar);
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();
        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de comprobante de venta", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void modificar_detalle_comprobante_venta_productos(int codigo_comprobante, DefaultTableModel model, DefaultTableModel model_preliminar) {

        eliminar_detalles_comprobante_venta_productos(codigo_comprobante, model_preliminar);
        registrar_detalle_comprobante_venta_productos(codigo_comprobante, model);

    }

    public void eliminar_detalles_comprobante_venta_productos(int codigo_comprobante, DefaultTableModel model_preliminar) {
        boolean correcto = false;
        String sentencia = "delete from detalle_venta where codigo_comprobante='" + codigo_comprobante + "'";
        try {

            comando3 = mibase.prepareStatement(sentencia);
            int val1 = comando3.executeUpdate();
            if (val1 > 0) {
                correcto = true;
                actualizar_stock_producto_al_eliminar_venta(model_preliminar);  //para que el stock del producto modificado se disminuya.

            }
            comando3.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

    }

    public void registrar_comprobante_venta_productos(String condicion_pago, Integer codigo_usuario_auditoria, int codigo, String vfecha, float igv, float total, String tipo_comprobante, String cliente, String RUC, DefaultTableModel model, String direccion, String orden_servicio, String orden_compra, String dni, int vIGV) {
        boolean correcto = false;

        String sentencia = "insert into comprobante_venta values(?,?,?,?,?,?,?,?,?,?,?,?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setInt(1, codigo);
            comando.setString(2, condicion_pago);
            comando.setDate(3, Date.valueOf(vfecha));
            comando.setString(4, tipo_comprobante);
            comando.setString(5, cliente);
            comando.setString(6, RUC);
            comando.setFloat(7, igv);
            comando.setFloat(8, total);
            comando.setString(9, direccion);
            comando.setString(10, orden_servicio);
            comando.setString(11, orden_compra);
            comando.setString(12, dni);
            comando.setInt(13, vIGV);

            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
                registrar_detalle_comprobante_venta_productos(codigo, model);
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = "insert into comprobante_venta values (" + codigo + ", " + condicion_pago + ", " + Date.valueOf(vfecha) + ", " + tipo_comprobante + "," + cliente + ", " + RUC + "," + igv + ", " + total + ", " + direccion + ", " + orden_servicio + ", " + orden_compra + ", " + dni + ")";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de comprobante de venta", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void registrar_detalle_comprobante_venta_productos(int codigo_comprobante, DefaultTableModel model) {
        boolean correcto = false;


        try {

            for (int i = 0; i < model.getRowCount(); i++) {
                String sentencia = "insert into detalle_venta values(?,?,?,?,?,?,?)";
                int codigo = 0, cantidad = Integer.parseInt(model.getValueAt(i, 1).toString());
                String guia = model.getValueAt(i, 0).toString();
                String descripcion_producto = model.getValueAt(i, 2).toString();


                //tipo_venta =0 es venta no servicio.
                int TIPO_VENTA = this.retornar_tipo_venta_detalle_comprobante_venta(descripcion_producto);
                //CODIGO PRODUCTO
                String codigo_producto = "";
                if (TIPO_VENTA == 0) {
                    codigo_producto = retornar_codigo_producto(descripcion_producto);
                } else {

                    String descripcion_parcial = "";

                    descripcion_parcial = descripcion_producto.substring(descripcion_producto.indexOf(" ") + 1, descripcion_producto.length());

                    System.out.println("DESCRIPCION PARCIAL: " + descripcion_parcial);
                    codigo_producto = retornar_codigo_producto(descripcion_parcial);

                }



                float precio_venta = Float.parseFloat(model.getValueAt(i, 3).toString());

                comando2 = mibase.prepareStatement(sentencia);
                comando2.setInt(1, codigo);
                comando2.setString(2, guia);
                comando2.setInt(3, cantidad);
                comando2.setString(4, codigo_producto);
                comando2.setInt(5, codigo_comprobante);
                comando2.setFloat(6, precio_venta);
                comando2.setFloat(7, TIPO_VENTA);

                int val1 = comando2.executeUpdate();
                if (val1 > 0 && TIPO_VENTA == 0) {
                    correcto = true;
                    //actualizar stock de productos
                    actualizar_stock_productoxventa(codigo_producto, cantidad);
                }
                comando2.close();
            }



        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public int retornar_tipo_venta_detalle_comprobante_venta(String descripcion_producto) {
        int tipo_venta = 0;//si no es servicio
        StringTokenizer tokens = new StringTokenizer(descripcion_producto);
        String[] array_tokens = new String[tokens.countTokens()];
        int m = 0;
        while (tokens.hasMoreTokens()) {
            array_tokens[m] = tokens.nextToken();
            m++;
        }
        String supuesto_tipo_venta = array_tokens[0];

        String sentencia = "select idtiposervicio from tipo_servicio where descripcion='" + supuesto_tipo_venta + "' ";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            if (respuesta.next()) {
                tipo_venta = respuesta.getInt(1);

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return tipo_venta;
    }


    public void registrar_comprobante_compra_productos(Integer codigo_usuario_auditoria, String codigo, String fecha, float monto_IGV, float monto_Total, int codigo_proveedor, DefaultTableModel model, String vIGV) {
        boolean correcto = false;

        String sentencia = "insert into comprobante_compra values(?,?,?,?,?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setString(1, codigo);
            comando.setDate(2, Date.valueOf(fecha));
            comando.setFloat(3, monto_IGV);
            comando.setFloat(4, monto_Total);//stock inicial se carga cuando se compra el producto
            comando.setInt(5, codigo_proveedor);
            comando.setString(6, vIGV);

            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
                registrar_detalle_comprobante_compra_productos(codigo, model);
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = "insert into comprobante_compra values (" + codigo + ", " + Date.valueOf(fecha) + ", " + monto_IGV + "," + monto_Total + ", " + codigo_proveedor + ", " + vIGV + ")";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de comprobante de compra", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void modificar_comprobante_compra_productos(Integer codigo_usuario_auditoria, String codigo, float monto_IGV, float monto_Total, int codigo_proveedor, DefaultTableModel model, DefaultTableModel model_preliminar) {
        boolean correcto = false;
        String sentencia = "update comprobante_compra set monto_igv='" + monto_IGV + "',monto_total=' " + monto_Total + "',codigo_proveedor='" + codigo_proveedor + "' where codigo='" + codigo + "'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
                modificar_detalle_comprobante_compra_productos(codigo, model, model_preliminar);
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de comprobante de compra", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void registrar_detalle_comprobante_compra_productos(String codigo_comprobante, DefaultTableModel model) {
        boolean correcto = false;
        try {

            for (int i = 0; i < model.getRowCount(); i++) {
                String sentencia = "insert into detalle_compra values(?,?,?,?,?,?)";

                int codigo = 0;
                String guia = model.getValueAt(i, 0).toString();
                int cantidad = Integer.parseInt(model.getValueAt(i, 1).toString());
                String codigo_producto = retornar_codigo_producto(model.getValueAt(i, 2).toString());
                float precio_costo = Float.parseFloat(model.getValueAt(i, 3).toString());

                comando2 = mibase.prepareStatement(sentencia);
                comando2.setInt(1, codigo);
                comando2.setString(2, guia);
                comando2.setInt(3, cantidad);
                comando2.setFloat(4, precio_costo);
                comando2.setString(5, codigo_producto);//stock inicial se carga cuando se compra el producto
                comando2.setString(6, codigo_comprobante);
                int val1 = comando2.executeUpdate();
                if (val1 > 0) {
                    correcto = true;
                    //actualizar stock de productos
                    actualizar_stock_productoxcompra(codigo_producto, cantidad);
                }
                comando2.close();
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public void modificar_detalle_comprobante_compra_productos(String codigo_comprobante, DefaultTableModel model, DefaultTableModel model_preliminar) {

        eliminar_detalles_comprobante_compra_productos(codigo_comprobante, model_preliminar);
        registrar_detalle_comprobante_compra_productos(codigo_comprobante, model);

    }

    public void eliminar_detalles_comprobante_compra_productos(String codigo_comprobante, DefaultTableModel model_preliminar) {
        boolean correcto = false;
        String sentencia = "delete from detalle_compra where codigo_comprobante='" + codigo_comprobante + "'";
        try {

            comando3 = mibase.prepareStatement(sentencia);
            int val1 = comando3.executeUpdate();
            if (val1 > 0) {
                correcto = true;
                actualizar_stock_producto_al_eliminar(model_preliminar);  //para que el stock del producto modificado se disminuya.

            }
            comando3.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

    }

    public void eliminar_comprobante(Integer codigo_usuario_auditoria, String codigo_comprobante) {
        boolean correcto = false;
        DefaultTableModel tabla_preliminar = cargar_detalle_comprobante(codigo_comprobante);
        String sentencia = "delete from detalle_compra where codigo_comprobante='" + codigo_comprobante + "'";
        String sentencia2 = "DELETE FROM comprobante_compra WHERE  codigo='" + codigo_comprobante + "'";

        try {

            comando3 = mibase.prepareStatement(sentencia);
            comando2 = mibase.prepareStatement(sentencia2);
            int val1 = comando3.executeUpdate();
            int val2 = comando2.executeUpdate();

            if (val1 > 0 && val2 > 0) {
                correcto = true;
                actualizar_stock_producto_al_eliminar(tabla_preliminar);  //para que el stock del producto modificado se disminuya.

            }

            comando3.close();
            comando2.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = sentencia + " " + sentencia2;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'D', query, "eliminación de comprobante de compra", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void eliminar_comprobante_ventas(Integer codigo_usuario_auditoria, int codigo_comprobante) {
        boolean correcto = false;
        DefaultTableModel tabla_preliminar = this.cargar_detalle_comprobante_venta(codigo_comprobante);
        String sentencia = "delete from detalle_venta where codigo_comprobante='" + codigo_comprobante + "'";
        String sentencia2 = "DELETE FROM comprobante_venta WHERE  codigo='" + codigo_comprobante + "'";

        try {

            comando3 = mibase.prepareStatement(sentencia);
            comando2 = mibase.prepareStatement(sentencia2);
            int val1 = comando3.executeUpdate();
            int val2 = comando2.executeUpdate();

            if (val1 > 0 && val2 > 0) {
                correcto = true;
                actualizar_stock_producto_al_eliminar_en_ventas(tabla_preliminar);  //para que el stock del producto modificado se disminuya.

            }

            comando3.close();
            comando2.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = sentencia + " " + sentencia2;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'D', query, "eliminación de comprobante de venta", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void actualizar_stock_producto_al_eliminar_en_ventas(DefaultTableModel model_preliminar) {
        boolean correcto = false;
        for (int i = 0; i < model_preliminar.getRowCount(); i++) {
            int cantidad = Integer.parseInt(model_preliminar.getValueAt(i, 1).toString());
            String codigo_producto = this.retornar_codigo_producto(model_preliminar.getValueAt(i, 2).toString());
            String sentencia = "UPDATE producto SET stock = stock + '" + cantidad + "' where codigo ='" + codigo_producto + "'";

            try {
                comando3 = mibase.prepareStatement(sentencia);
                int val1 = comando3.executeUpdate();
                if (val1 > 0) {
                    correcto = true;
                }
                comando3.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }

        }
    }

    public String retornar_codigo_producto(String descripcion) {
        String codigo = "";
        String sentencia = "select codigo from producto where descripcion='" + descripcion + "'";
        try {
            operacion2 = (Statement) mibase.createStatement();
            respuesta1 = operacion2.executeQuery(sentencia);
            if (respuesta1.next()) {
                codigo = respuesta1.getString(1);
            }
            operacion2.close();
            respuesta1.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public void actualizar_stock_producto_al_eliminar_venta(DefaultTableModel model_preliminar) {
        boolean correcto = false;
        for (int i = 0; i < model_preliminar.getRowCount(); i++) {
            int cantidad = Integer.parseInt(model_preliminar.getValueAt(i, 1).toString());
            String codigo_producto = this.retornar_codigo_producto(model_preliminar.getValueAt(i, 2).toString());
            String sentencia = "UPDATE producto SET stock = stock + '" + cantidad + "' where codigo ='" + codigo_producto + "'";

            try {
                comando3 = mibase.prepareStatement(sentencia);
                int val1 = comando3.executeUpdate();
                if (val1 > 0) {
                    correcto = true;
                }
                comando3.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }

        }
    }

    public void actualizar_stock_producto_al_eliminar(DefaultTableModel model_preliminar) {//compra
        boolean correcto = false;
        for (int i = 0; i < model_preliminar.getRowCount(); i++) {
            int cantidad = Integer.parseInt(model_preliminar.getValueAt(i, 1).toString());
            String codigo_producto = this.retornar_codigo_producto(model_preliminar.getValueAt(i, 2).toString());
            String sentencia = "UPDATE producto SET stock = stock - '" + cantidad + "' where codigo ='" + codigo_producto + "'";

            try {
                comando3 = mibase.prepareStatement(sentencia);
                int val1 = comando3.executeUpdate();
                if (val1 > 0) {
                    correcto = true;
                }
                comando3.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }

        }
    }

    public void actualizar_stock_productoxventa(String codigo_producto, int cantidad_vendida) {
        boolean correcto = false;
        String sentencia = "UPDATE producto SET stock = stock - '" + cantidad_vendida + "' where codigo ='" + codigo_producto + "'";

        try {
            comando3 = mibase.prepareStatement(sentencia);
            int val1 = comando3.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando3.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public void actualizar_stock_productoxcompra(String codigo_producto, int cantidad_adicional) {
        boolean correcto = false;
        String sentencia = "UPDATE producto SET stock = stock + '" + cantidad_adicional + "' where codigo ='" + codigo_producto + "'";

        try {
            comando3 = mibase.prepareStatement(sentencia);
            int val1 = comando3.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando3.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public int validar_en_sistema(String usuario, String clave) {
        int tipo = 0;

        String sentencia = "select codigo_tipo_usuario from usuario where username='"
                + usuario + "' and clave='" + clave + "'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                tipo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return tipo;

    }

    public String obtener_datos_usuario(String usuario, String clave) {
        String datos_usuario = "";

        String sentencia = "select nombres,apellido_paterno,apellido_materno from usuario where username='"
                + usuario + "' and clave='" + clave + "'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                datos_usuario = respuesta.getString(1) + " " + respuesta.getString(2) + " " + respuesta.getString(3);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos_usuario;

    }

    public int retornar_stock_producto(String producto) {

        int stock = 0;

        String sentencia = "select stock from producto where descripcion='" + producto + "'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                stock = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return stock;

    }

    public float retornar_precio_producto(String producto) {

        float precio_venta = 0;

        String sentencia = "select precio_venta from producto where descripcion='" + producto + "'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                precio_venta = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return precio_venta;

    }

    public int devolver_codigo_proveedor(String proveedor) {
        int codigo = 0;

        String sentencia = "select codigo from proveedor where nombre_corporativo='" + proveedor + "'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;
    }

    public int retornar_codigo_usuario(String username) {
        int codigo = 0;

        String sentencia = "SELECT codigo FROM usuario where username='" + username + "'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;
    }

    public DefaultTableModel cargar_proveedores_tabla() {

        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Codigo");
        model.addColumn("Nombre Corporativo");
        model.addColumn("Datos Representante");
        model.addColumn("Teléfono Representante");
        model.addColumn("Email Representante");

        String sentencia = "select codigo, nombre_corporativo, datos_representante, telefono_representante, email_representante from proveedor";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 1; i < 6; i++) {
                    fil.add(respuesta.getString(i));
                }
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;
    }

    public Vector cargar_usuario_por_usernames() {


        Vector<String> usuarios = new Vector();

        String sentencia = "select username from usuario";

        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                usuarios.addElement(respuesta.getString(1));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return usuarios;

    }

    public Vector cargar_proveedores() {


        Vector<String> proveedores = new Vector();

        String sentencia = "select nombre_corporativo from proveedor";

        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                proveedores.addElement(respuesta.getString(1));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return proveedores;

    }

    public Vector cargar_IGV() {


        Vector<String> vIGV = new Vector();

        String sentencia = "select valor from constante where descripcion like 'IGV'";

        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                vIGV.addElement(respuesta.getString(1));
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return vIGV;

    }

    public Vector cargar_tipo_servicio_combobox() {


        Vector<String> tipo_servicio = new Vector();

        String sentencia = "select descripcion from tipo_servicio where idtiposervicio !=0";//para que no se muestre espacio en blanco en ventas normales

        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                tipo_servicio.addElement(respuesta.getString(1));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return tipo_servicio;

    }

    public String retorna_porcentaje_igv() {
        String igv = "";
        String sentencia = "SELECT valor FROM Constante where descripcion='IGV'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                igv = respuesta.getString(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return igv;
    }

    public boolean existe_producto(String codigo) {
        boolean existe = false;
        String sentencia = "SELECT * FROM producto where codigo='" + codigo + "'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                existe = true;
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return existe;
    }

    public Integer retornar_codigo_categoria(String descripcion) {
        Integer codigo_categoria = -1;
        String sentencia = "select codigo from categoria where descripcion='" + descripcion + "'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo_categoria = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo_categoria;
    }

    public String[] cargar_encabezado_comprobante(String codigo) {
        String[] datos1 = new String[6];
        String sentencia = "SELECT ccompra.codigo, ccompra.fecha, prov.nombre_corporativo, ccompra.monto_igv, ccompra.monto_total FROM comprobante_compra AS ccompra, proveedor as prov WHERE prov.codigo =ccompra.codigo_proveedor AND ccompra.codigo='" + codigo + "' ";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            String fecha_date;
            if (respuesta.next()) {
                datos1[0] = respuesta.getString(1);
                fecha_date = String.valueOf(respuesta.getDate(2));// a formato normal no aaaa-mm-dd ->
                datos1[1] = fecha_date.substring(8, 10) + "/" + fecha_date.substring(5, 7) + "/" + fecha_date.substring(0, 4);
                datos1[2] = respuesta.getString(3);
                datos1[3] = String.valueOf(respuesta.getFloat(4));
                datos1[4] = String.valueOf(respuesta.getFloat(5));
                datos1[5] = "" + (respuesta.getFloat(5) - respuesta.getFloat(4));
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public String[] cargar_encabezado_comprobante_venta(int codigo) {
        String[] datos1 = new String[12];
        String sentencia = "SELECT cventa.codigo, cventa.direccion, cventa.fecha, cventa.tipo_comprobante, cventa.cliente,cventa.RUC, cventa.monto_igv, cventa.monto_total,cventa.dni, cventa.condicion_pago,cventa.orden_servicio, cventa.orden_compra FROM comprobante_venta AS cventa where cventa.codigo='" + codigo + "' ";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            String fecha_date;
            if (respuesta.next()) {
                datos1[0] = String.valueOf(respuesta.getInt(1));
                datos1[1] = String.valueOf(respuesta.getString(2));
                fecha_date = String.valueOf(respuesta.getDate(3));// a formato normal no aaaa-mm-dd ->
                datos1[2] = fecha_date.substring(8, 10) + "/" + fecha_date.substring(5, 7) + "/" + fecha_date.substring(0, 4);
                datos1[3] = respuesta.getString(4);
                datos1[4] = respuesta.getString(5);
                datos1[5] = respuesta.getString(6);
                datos1[6] = String.valueOf(respuesta.getFloat(7));
                datos1[7] = String.valueOf(respuesta.getFloat(8));
                datos1[8] = respuesta.getString(9);//5 dni
                datos1[9] = respuesta.getString(10);//5 condicion pago
                datos1[10] = respuesta.getString(11);//5 orden serviciio
                datos1[11] = respuesta.getString(12);//5 orden compra
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public String[] cargar_datos_proveedor(int codigo) {
        String[] datos1 = new String[10];
        String sentencia = "select codigo, nombre_corporativo,RUC, pagina_web, fax,  datos_representante, telefono_representante, email_representante from proveedor where codigo='" + codigo + "'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);

            if (respuesta.next()) {
                datos1[0] = String.valueOf(respuesta.getInt(1));
                datos1[1] = respuesta.getString(2);
                datos1[2] = respuesta.getString(3);
                datos1[3] = respuesta.getString(4);
                datos1[4] = respuesta.getString(5);
                String todo_datos_representante = respuesta.getString(6);
                int posb1 = todo_datos_representante.indexOf(" ");
                String alterado_datos = todo_datos_representante.substring((posb1 + 1), todo_datos_representante.length());
                int posb2 = alterado_datos.indexOf(" ");

                datos1[5] = todo_datos_representante.substring(0, posb1);  //nombre

                datos1[6] = alterado_datos.substring(0, posb2);  //ap_pat
                datos1[7] = alterado_datos.substring((posb2 + 1), alterado_datos.length());    //ap_mat
                datos1[8] = respuesta.getString(7);
                datos1[9] = respuesta.getString(8);



            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }
    public Vector cargar_categorias_combobox(){


    Vector <String> categorias=new Vector();

        String sentencia="select descripcion from categoria";

        System.out.println(sentencia);
        try {
            operacion=mibase.createStatement();
            respuesta=operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()){
               categorias.addElement(respuesta.getString(1));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
     return categorias;

     }
    public Double redondear(float numero, int decimales) {
        return Math.round(numero * Math.pow(10, decimales)) / Math.pow(10, decimales);
    }

    public Float[] cargar_igv_total_venta(String fecha_inicio, String fecha_fin) {
        Float[] datos1 = new Float[2];
//aqui liz alvarez
        String sentencia = "" +
                "SELECT (dventa.cantidad*dventa.precio_venta*(cventa.porcentaje_igv/100)) , ((dventa.cantidad*dventa.precio_venta)+(dventa.cantidad*dventa.precio_venta)*(cventa.porcentaje_igv/100) ) "+
                " FROM detalle_venta as dventa, comprobante_venta as cventa " +
                " WHERE cventa.codigo= dventa.codigo_comprobante and cventa.fecha>='" + fecha_inicio + "' AND cventa.fecha <='" + fecha_fin + "';";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            datos1[0] = Float.parseFloat("0");
            datos1[1] = Float.parseFloat("0");
            String fecha_date;
            while (respuesta.next()) {
                datos1[0] = respuesta.getFloat(1) + datos1[0];//igv
                System.out.println("igv::: " + datos1[0]);
                datos1[1] = respuesta.getFloat(2) + datos1[1];//total linea
                System.out.println("total::: " + datos1[1]);

            }
            datos1[0] = Float.parseFloat("" + redondear(datos1[0], 2));
            datos1[1] = Float.parseFloat("" + redondear(datos1[1], 2));
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public Float[] cargar_igv_total_compras(String fecha_inicio, String fecha_fin) {
        Float[] datos1 = new Float[2];

        String sentencia = "SELECT (dcompra.cantidad*dcompra.precio_costo*(ccompra.porcentaje_igv/100)) igv, ((dcompra.cantidad*dcompra.precio_costo)+(dcompra.cantidad*dcompra.precio_costo)*(ccompra.porcentaje_igv/100) ) total FROM detalle_compra AS dcompra, comprobante_compra AS ccompra WHERE ccompra.codigo= dcompra.codigo_comprobante AND ccompra.fecha>='" + fecha_inicio + "' AND ccompra.fecha <='" + fecha_fin + "';";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            datos1[0] = Float.parseFloat("0");
            datos1[1] = Float.parseFloat("0");
            String fecha_date;
            while (respuesta.next()) {
                datos1[0] = respuesta.getFloat(1) + datos1[0];//igv
                datos1[1] = respuesta.getFloat(2) + datos1[1];//total linea

            }
            datos1[0] = Float.parseFloat("" + this.redondear(datos1[0], 2));
            datos1[1] = Float.parseFloat("" + this.redondear(datos1[1], 2));
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public MiModeloCompraBoleta cargar_detalle_comprobante(String codigo_comprobante) { //de compra

        //DefaultTableModel model= new DefaultTableModel();

        MiModeloCompraBoleta model = new MiModeloCompraBoleta();
        model.addColumn("Guía");
        model.addColumn("Cantidad");
        model.addColumn("Descripción");
        model.addColumn("Precio Unitario");
        model.addColumn("Precio Total");

        String sentencia = "SELECT dcompra.codigo, dcompra.guia , dcompra.cantidad, prod.descripcion, dcompra.precio_costo FROM comprobante_compra AS ccompra, detalle_compra AS dcompra, producto AS prod WHERE ccompra.codigo=dcompra.codigo_comprobante AND prod.codigo=dcompra.codigo_producto AND ccompra.codigo='" + codigo_comprobante + "' ORDER BY dcompra.codigo ASC";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 2; i < 6; i++) {
                    fil.add(respuesta.getString(i));
                }
                fil.add(respuesta.getInt(3) * respuesta.getFloat(5)); //precio total fila
                model.addRow(fil);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;


    }

//REVISAR
    public MiModeloVentaBoleta cargar_detalle_comprobante_venta(int codigo_comprobante) {
        MiModeloVentaBoleta model = new MiModeloVentaBoleta();
        model.addColumn("Guía");
        model.addColumn("Cantidad");
        model.addColumn("Descripción");
        model.addColumn("Precio Unitario");
        model.addColumn("Precio Total");

        String sentencia = "select  dventa.codigo, dventa.guia, dventa.cantidad, prod.descripcion, dventa.precio_venta, dventa.tipo_venta  from detalle_venta as dventa, producto as prod where dventa.codigo_producto =prod.codigo and dventa.codigo_comprobante='" + codigo_comprobante + "' order by dventa.codigo asc ";
        System.out.println(sentencia);
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);//executeQuery xq es un select, sino seria update
            while (respuesta.next()) {
                Vector fil = new Vector();

                for (int i = 2; i < 6; i++) {

                    if (i == 4) {//la descripcion del producto
                        String descripcion_producto = respuesta.getString(i);
                        int tipo_venta = respuesta.getInt(6);

                        if (tipo_venta != 0) {
                            descripcion_producto = retornar_descripcion_tipo_servicio(tipo_venta) + " " + descripcion_producto;
                            fil.add(descripcion_producto);


                        } else {
                            fil.add(descripcion_producto);
                        }
                    } else {
                        fil.add(respuesta.getString(i));
                    }
                }

                int cantidad = Integer.parseInt(fil.get(1).toString());
                float precio_unitario = Float.parseFloat(fil.get(3).toString());
                fil.add(cantidad * precio_unitario);
                model.addRow(fil);
            }

            operacion.close();
            respuesta.close();
        } catch (SQLException ex) { //genera errores por operaiones sql
            ex.printStackTrace();
        }
        return model;


    }

    public String retornar_descripcion_tipo_servicio(int idtiposervicio) {
        String descripcion_tipo_servicio = "";

        String sentencia = "select descripcion from tipo_servicio where idtiposervicio='" + idtiposervicio + "'";
        try {
            operacion2 = mibase.createStatement();
            respuesta1 = operacion2.executeQuery(sentencia);

            if (respuesta1.next()) {
                descripcion_tipo_servicio = respuesta1.getString(1);

            }

            operacion2.close();
            respuesta1.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return descripcion_tipo_servicio;

    }

    public void registrar_productos(Integer codigo_usuario_auditoria, String codigo, String descripcion, float precioventa, int categoria) {
        boolean correcto = false;

        String sentencia = "insert into producto values(?,?,?,?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setString(1, codigo);
            comando.setString(2, descripcion);
            comando.setFloat(3, precioventa);
            comando.setInt(4, 0);//stock inicial se carga cuando se compra el producto
            comando.setInt(5, categoria);

            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        String query = "insert into producto values (" + codigo + ", " + descripcion + ", " + precioventa + ",0, " + categoria + ")";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de producto", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);


    }

    public void registrar_categoria(Integer codigo_usuario_auditoria, String codigo, String descripcion) {
        boolean correcto = false;

        String sentencia = "insert into categoria values(?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setString(1, codigo);
            comando.setString(2, descripcion);

            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        String query = "insert into categoria values (" + codigo + ", " + descripcion + ")";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de categoría de producto", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);


    }

    public void registrar_servicio(Integer codigo_usuario_auditoria, String codigo, String descripcion) {
        boolean correcto = false;

        String sentencia = "insert into tipo_servicio values(?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setString(1, codigo);
            comando.setString(2, descripcion);

            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        String query = "insert into tipo_servicio values (" + codigo + ", " + descripcion + ")";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de tipo de servicio", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);


    }

    public void registrar_usuarios(Integer codigo_usuario_auditoria, String nombres, String apellido_paterno, String apellido_materno, String username, String contrasenia, int tipo) {
        boolean correcto = false;

        String sentencia = "insert into usuario values(?,?,?,?,?,?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setInt(1, 0);
            comando.setString(2, username);
            comando.setString(3, contrasenia);
            comando.setInt(4, tipo);
            comando.setString(5, nombres);
            comando.setString(6, apellido_paterno);
            comando.setString(7, apellido_materno);
            int val1 = comando.executeUpdate();



            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        String query = "insert into usuario values (" + retornar_ultimo_codigo_usuario() + ", " + username + ", " + contrasenia + ", " + tipo + ", " + nombres + ", " + apellido_paterno + ", " + apellido_materno + ")";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de usuario", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);

    }

    public int retornar_ultimo_codigo_usuario() {
        int codigo = 0;
        String sentencia = "select codigo from usuario order by codigo desc limit 1";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public int retornar_ultimo_codigo_proveedor() {
        int codigo = 0;
        String sentencia = "SELECT codigo FROM proveedor ORDER BY codigo DESC limit 1";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public void registrar_log(int cod_usuario, char tipo_accion, String query, String nombre_frame, String fecha) {
        boolean correcto = false;
        hora_sistema = time.obtener_hora_sistema();
        String sentencia = "insert into log values(?,?,?,?,?,?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setInt(1, 0);
            comando.setInt(2, cod_usuario);
            comando.setString(3, Character.toString(tipo_accion));
            comando.setString(4, query);
            comando.setString(5, nombre_frame);
            comando.setDate(6, Date.valueOf(fecha));
            comando.setTime(7, Time.valueOf(hora_sistema));
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

    }

    public int retornar_siguiente_codigo_usuario() {
        int codigo = 0;
        String sentencia = "select auto_increment from `information_schema`.tables where TABLE_SCHEMA = 'atsiscoin' and TABLE_NAME = 'usuario'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public boolean existe_cuenta_usuario(String cuenta_usuario, Integer codigo_usuario, String tipo_consulta) throws Exception {
        boolean dato = false;
        String sql = "";
        if (tipo_consulta.equals("registro")) {
            sql = "SELECT * FROM usuario where username=?";
            try {
                PreparedStatement ps = mibase.prepareStatement(sql);
                //sustituir los ?
                ps.setString(1, cuenta_usuario);
                //ejecutar el query
                ps.execute();//o executeUpdate
                ResultSet rs = ps.executeQuery();
                if (rs.next()) {
                    return true;
                }
            } catch (SQLException e) {
                e.printStackTrace();
                throw e;
            } finally {
                mibase.close();
            }
        } else {
            if (tipo_consulta.equals("modificacion")) {
                sql = "SELECT * FROM usuario where username=? and codigo=?";
                try {
                    PreparedStatement ps = mibase.prepareStatement(sql);
                    //sustituir los ?
                    ps.setString(1, cuenta_usuario);
                    ps.setInt(2, codigo_usuario);
                    //ejecutar el query
                    ps.execute();//o executeUpdate
                    ResultSet rs = ps.executeQuery();
                    if (rs.next()) {
                        return false;//existe, pero es válido pues es una modificación
                    } else {
                        sql = "SELECT * FROM usuario where username=?";

                        PreparedStatement ps2 = mibase.prepareStatement(sql);
                        //sustituir los ?
                        ps2.setString(1, cuenta_usuario);
                        //ejecutar el query
                        ps2.execute();//o executeUpdate
                        ResultSet rs2 = ps2.executeQuery();
                        if (rs2.next()) {
                            return true;//existe en otras filas
                        }

                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw e;
                } finally {
                    mibase.close();
                }
            }
        }





        return dato;
    }

    public int retornar_siguiente_codigo_proveedor() {
        int codigo = 0;
        String sentencia = "select auto_increment from `information_schema`.tables where TABLE_SCHEMA = 'atsiscoin' and TABLE_NAME = 'proveedor'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public int retornar_siguiente_codigo_categoria() {
        int codigo = 0;
        String sentencia = "select auto_increment from `information_schema`.tables where TABLE_SCHEMA = 'atsiscoin' and TABLE_NAME = 'categoria'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public int retornar_siguiente_codigo_servicio() {
        int codigo = 0;
        String sentencia = "select auto_increment from `information_schema`.tables where TABLE_SCHEMA = 'atsiscoin' and TABLE_NAME = 'tipo_servicio'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public int retornar_siguiente_comprobante_venta() {
        int codigo = 0;
        String sentencia = "select auto_increment from `information_schema`.tables where TABLE_SCHEMA = 'atsiscoin' and TABLE_NAME = 'comprobante_venta'";
        try {
            operacion = (Statement) mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                codigo = respuesta.getInt(1);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return codigo;

    }

    public void eliminar_proveedor(Integer codigo_usuario_auditoria, int codigo) {
        boolean correcto = false;
        String sentencia = "delete from proveedor where codigo='" + codigo + "'";
        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            //  ex.printStackTrace();

            this.frmMantenimientoProveedores.mensaje_error_eliminacion_por_presencia_comprobante_proveedor();
        }
        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();
        registrar_log(codigo_usuario_auditoria, 'D', query, "eliminación de proveedor", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void eliminar_usuario(Integer codigo_usuario_auditoria, int codigo) {
        boolean correcto = false;
        String sentencia = "delete from usuario where codigo='" + codigo + "'";
        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = "delete from usuario where codigo='" + codigo + "'";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'D', query, "eliminación de usuario", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);

    }

    public void eliminar_producto(Integer codigo_usuario_auditoria, String codigo) {
        boolean correcto = false;
        String sentencia = "delete from producto where codigo='" + codigo + "'";
        try {
            comando = mibase.prepareStatement(sentencia);

            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            // ex.printStackTrace();
            frmMantenimientoProductos.mensaje_error_eliminacion_por_presencia_comprobante();

        }

        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'D', query, "eliminación de producto", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void eliminar_categoria(Integer codigo_usuario_auditoria, String codigo) {
        boolean correcto = false;
        String sentencia = "delete from categoria where codigo='" + codigo + "'";
        try {
            comando = mibase.prepareStatement(sentencia);

            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
            String query = sentencia;
            fecha_sistema = time.obtener_fecha_sistema();

            registrar_log(codigo_usuario_auditoria, 'D', query, "eliminación de categoría", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
        } catch (SQLException ex) {
            frmMantenimientoCategorias.mensaje_error_eliminacion_por_presencia_productos_categoria();
        }


    }

    public void eliminar_servicio(Integer codigo_usuario_auditoria, String codigo) {
        boolean correcto = false;
        boolean valido = false;
        String sentencia = "";
        sentencia = "select count(*) from detalle_venta where tipo_venta ='" + codigo + "'";
        try {
            operacion2 = mibase.createStatement();
            respuesta1 = operacion2.executeQuery(sentencia);
            if (respuesta1.next()) {
                if (respuesta1.getInt(1) == 0) {
                    valido = true;
                }
            }

            operacion2.close();
            respuesta1.close();

            if (valido) {

                sentencia = "delete from tipo_servicio where idtiposervicio='" + codigo + "'";
                comando = mibase.prepareStatement(sentencia);
                int val1 = comando.executeUpdate();
                if (val1 > 0) {
                    correcto = true;
                    comando.close();
                }
                String query = sentencia;
                fecha_sistema = time.obtener_fecha_sistema();

                registrar_log(codigo_usuario_auditoria, 'D', query, "eliminación de tipo de servicio", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
            } else {
                frmMantenimientoServicios.mensaje_error_eliminacion_por_presencia_comprobante();
            }


        } catch (SQLException ex) {
            // ex.printStackTrace();
            frmMantenimientoServicios.mensaje_error_eliminacion_por_presencia_comprobante();

        }


    }

    public void setMantenimientoProductos(Mantenimiento_productos frmMantenimientoProductos) {
        this.frmMantenimientoProductos = frmMantenimientoProductos;
    }

    public void setMantenimientoCategorias(Mantenimiento_categorias frmMantenimientoCategorias) {
        this.frmMantenimientoCategorias = frmMantenimientoCategorias;
    }

    public void setMantenimientoServicios(Mantenimiento_servicios frmMantenimientoServicios) {
        this.frmMantenimientoServicios = frmMantenimientoServicios;
    }

    public void setMantenimientoProveedores(Mantenimiento_proveedores frmMantenimientoProveedores) {
        this.frmMantenimientoProveedores = frmMantenimientoProveedores;
    }

    public String[] cargar_usuario_por_codigo(int codigo) {
        String[] datos1 = new String[7];
        String sentencia = "select * from usuario where codigo='" + codigo + "'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                datos1[0] = String.valueOf(respuesta.getInt(1));
                datos1[1] = respuesta.getString(2);
                datos1[2] = respuesta.getString(3);
                datos1[3] = String.valueOf(respuesta.getInt(4));
                datos1[4] = respuesta.getString(5);
                datos1[5] = respuesta.getString(6);
                datos1[6] = respuesta.getString(7);
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public String[] cargar_producto_por_codigo(String codigo) {
        String[] datos1 = new String[5];
        String sentencia = "select prod.codigo,  prod.descripcion, cate.descripcion, prod.stock, prod.precio_venta from producto as prod, categoria as cate where prod.codigo='" + codigo + "' and prod.codigo_categoria=cate.codigo ";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                datos1[0] = String.valueOf(respuesta.getString(1));
                datos1[1] = String.valueOf(respuesta.getString(2));
                datos1[2] = String.valueOf(respuesta.getString(3));
                datos1[3] = String.valueOf(respuesta.getInt(4));
                datos1[4] = String.valueOf(respuesta.getFloat(5));
            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public String[] cargar_categoria_por_codigo(String codigo) {
        String[] datos1 = new String[2];
        String sentencia = "select codigo,  descripcion from categoria where codigo='" + codigo + "'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                datos1[0] = String.valueOf(respuesta.getString(1));
                datos1[1] = String.valueOf(respuesta.getString(2));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public void modificar_porcentaje_igv(Integer codigo_usuario_auditoria, String porcentaje) {
        boolean correcto = false;
        String sentencia = "update Constante set valor='" + porcentaje + "' where descripcion='IGV'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de porcentaje del IGV", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void insertar_porcentaje_igv(Integer codigo_usuario_auditoria, String porcentaje) {
        boolean correcto = false;

        int codigo = getCorrelativoConstante();

        String sentencia = "insert into constante values (" + codigo + ", 'IGV', " + porcentaje + ")";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();

            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de porcentaje del IGV", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public int getCorrelativoConstante() {
        int correlativo = 0;

        String sentencia = "select codigo from constante order by codigo desc limit 1";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);

            if (respuesta.next()) {
                correlativo = respuesta.getInt(1);
            }


        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return correlativo + 1;
    }

    public String[] cargar_servicio_por_codigo(String codigo) {
        String[] datos1 = new String[2];
        String sentencia = "select idtiposervicio,  descripcion from tipo_servicio where idtiposervicio='" + codigo + "'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            if (respuesta.next()) {
                datos1[0] = String.valueOf(respuesta.getString(1));
                datos1[1] = String.valueOf(respuesta.getString(2));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public void modificar_usuario(Integer codigo_usuario_auditoria, int codigo, String nombres, String apellido_paterno, String apellido_materno, String username, String contrasenia, int tipo) {
        boolean correcto = false;
        String sentencia = "update usuario set username='" + username + "',clave='" + contrasenia + "',codigo_tipo_usuario='" + tipo + "',nombres='" + nombres + "' ,apellido_paterno='" + apellido_paterno + "' ,apellido_materno='" + apellido_materno + "' where codigo='" + codigo + "'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = "update usuario set username='" + username + "',clave='" + contrasenia + "',codigo_tipo_usuario='" + tipo + "',nombres='" + nombres + "' ,apellido_paterno='" + apellido_paterno + "' ,apellido_materno='" + apellido_materno + "' where codigo='" + codigo + "'";
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de usuario", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void modificar_proveedor(Integer codigo_usuario_auditoria, int codigo, String ncorporativo, String pweb, String ruc, String fax, String nrepresentante, String ap_paternor, String ap_maternor, String telefono, String email) {
        boolean correcto = false;
        String sentencia = "update proveedor set nombre_corporativo ='" + ncorporativo + "', RUC='" + ruc + "',pagina_web='" + pweb + "',FAX='" + fax + "',datos_representante='" + nrepresentante + " " + ap_paternor + " " + ap_maternor + "',telefono_representante='" + telefono + "',email_representante='" + email + "' where codigo ='" + codigo + "'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();
        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de proveedor", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public Vector cargar_productos_descripcion_por_categoria(String categoria) {
        Vector<String> datos1 = new Vector();
        String sentencia = "select prod.descripcion from producto as prod, categoria as cate where cate.codigo=prod.codigo_categoria and cate.descripcion='" + categoria + "'";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            while (respuesta.next()) {
                datos1.addElement(String.valueOf(respuesta.getString(1)));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public Vector cargar_productos_disponibles() {
        Vector<String> datos1 = new Vector();
        String sentencia = "select descripcion from producto where stock !=0";
        try {
            operacion = mibase.createStatement();
            respuesta = operacion.executeQuery(sentencia);
            while (respuesta.next()) {
                datos1.addElement(String.valueOf(respuesta.getString(1)));

            }
            operacion.close();
            respuesta.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return datos1;

    }

    public void modificar_producto(Integer codigo_usuario_auditoria, String cod, String desc, int cat, float prec) {
        boolean correcto = false;
        String sentencia = "update producto set descripcion='" + desc + "',precio_venta=' " + prec + "',codigo_categoria='" + cat + "' where codigo='" + cod + "'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de producto", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void modificar_categoria(Integer codigo_usuario_auditoria, String cod, String desc) {
        boolean correcto = false;
        String sentencia = "update categoria set descripcion='" + desc + "' where codigo='" + cod + "'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de categoría de producto", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void modificar_servicio(Integer codigo_usuario_auditoria, String cod, String desc) {
        boolean correcto = false;
        String sentencia = "update tipo_servicio set descripcion='" + desc + "' where idtiposervicio='" + cod + "'";

        try {
            comando = mibase.prepareStatement(sentencia);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        String query = sentencia;
        fecha_sistema = time.obtener_fecha_sistema();

        registrar_log(codigo_usuario_auditoria, 'U', query, "modificación de tipo de servicio", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);
    }

    public void registrar_proveedores(Integer codigo_usuario_auditoria, int codigo, String ncorporativo, String pweb, String ruc, String fax, String nrepresentante, String ap_paternor, String ap_maternor, String telefono, String email) {
        boolean correcto = false;
        String datosr = "";
        String sentencia = "insert into proveedor values(?,?,?,?,?,?,?,?)";
        try {
            comando = mibase.prepareStatement(sentencia);
            comando.setInt(1, 0);
            comando.setString(2, ncorporativo);
            comando.setString(3, ruc);
            comando.setString(4, pweb);
            comando.setString(5, fax);
            datosr = nrepresentante + " " + ap_paternor + " " + ap_maternor;
            comando.setString(6, datosr);
            comando.setString(7, telefono);
            comando.setString(8, email);
            int val1 = comando.executeUpdate();
            if (val1 > 0) {
                correcto = true;
            }
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        String query = "insert into proveedor values (" + retornar_ultimo_codigo_proveedor() + ", " + ncorporativo + ", " + ruc + ", " + pweb + ", " + fax + ", " + datosr + ", " + telefono + ", " + email + ")";
        fecha_sistema = time.obtener_fecha_sistema();
        registrar_log(codigo_usuario_auditoria, 'I', query, "registro de proveedor", fecha_sistema[2] + "-" + fecha_sistema[1] + "-" + fecha_sistema[0]);

    }
}
